import { login, getInfo } from '@/api/system/user'
import { getToken, setToken, removeToken } from '@/utils/auth'
// import router, { resetRouter } from '@/router'
// 定义属性
const state = {
  token: getToken(),
  userInfo: {},
  // name: '',
  // avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
  // introduction: '',
  roles: []
}

// 改变状态的，内部调用
const mutations = {
  setToken(state, token) {
    state.token = token
    // 同步到缓存，前端持久化
    setToken(token)
  },
  removeToken(state) {
    // 删除Vuex的token
    state.token = null
    removeToken()
  },

  setUserInfo(state, data) {
    state.userInfo = data
    // state.name =  state.userInfo.username
    // state.avatar = data.staffPhoto
    // state.introduction = data.staffPhoto

  }

}
// 对外调用
const actions = {

  // context上下文，传入参数
  async login(context, data) {

    // 调用登录接口
    const token = await login(data)
    // 保存token
    context.commit('setToken', token)
  },

  /**
   * 异步获取用户信息并提交到状态管理器
   * 此函数通过异步调用getInfo方法来获取用户信息。
   * 获取到信息后，它将这些信息提交给Vuex中的setUserInfo mutation，
   * 从而更新应用的状态，使这些信息可以在应用的其他地方使用。
   * @param {Object} context - Vuex的context对象，提供了commit方法来提交mutation
   */
  async getUserInfo(context) {


    const result = await getInfo()

    context.commit('setUserInfo', result)
  },

  // 退出登录的action
  async logout(context) {
    context.commit('removeToken') // 删除token
    context.commit('setUserInfo', {}) // 设置用户信息为空对象
  }
}

// 对外导出
export default {
  namespaced: true, // 开启了命名空间 user
  state,
  mutations,
  actions
}
